﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using CapaNegocio;

public partial class abmObra_AdministrarHojaDeRuta : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["UsuLogin"] == null)
                Response.Redirect("../Default.aspx", true);
            else
            {
                Usuario usu = ((Usuario)(Session["UsuLogin"]));
                Label1.Text = usu.Apellido + ", " + usu.Nombre + " (" + usu.Perfil.Nombre + ")";

                List<OrdenTrabajo> ordenes = OrdenTrabajo.buscarOrdenesNoAsignadas();
                lstOrdenesTrabajo.DataSource = ordenes;
                lstOrdenesTrabajo.DataTextField = "textoAMostrar";
                lstOrdenesTrabajo.DataValueField = "codigo";
                lstOrdenesTrabajo.DataBind();

                List<Constructor> constructores = Constructor.buscarConstructoresLibres();
                lstConstructor.DataSource = constructores;
                lstConstructor.DataTextField = "textoAMostrar";
                lstConstructor.DataValueField = "codigo";
                lstConstructor.DataBind();

                List<Asignacion> asignaciones = Asignacion.buscarAsignacionesEnCurso();
                refreshGrid(asignaciones);

            }
        }

    }

    protected void grdAsignaciones_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        List<Asignacion> asignaciones = Asignacion.buscarAsignacionesEnCurso();

        OrdenTrabajo o = OrdenTrabajo.buscarOrden(Convert.ToInt32(grdAsignaciones.Rows[e.RowIndex].Cells[0].Text));
        Asignacion a = Asignacion.buscarAsignacion(o);
        if (a.eliminar())
        {
            List<OrdenTrabajo> ordenes = OrdenTrabajo.buscarOrdenesNoAsignadas();
            lstOrdenesTrabajo.DataSource = ordenes;
            lstOrdenesTrabajo.DataTextField = "textoAMostrar";
            lstOrdenesTrabajo.DataValueField = "codigo";
            lstOrdenesTrabajo.DataBind();
            asignaciones = Asignacion.buscarAsignacionesEnCurso();
            refreshGrid(asignaciones);
        }
        else 
        {
            Session["error"] = "La asignación de la orden de trabajo no puede ser eliminada ya que se encuentra en proceso de planificación y/o construcción.";
            Session["ruta"] = "AdministrarHojaDeRuta.aspx";
            Response.Redirect("../Error.aspx");
        }
    }

    protected void grdAsignaciones_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grdAsignaciones.PageIndex = e.NewPageIndex;
        grdAsignaciones.DataBind();
    }

    protected void grdAsignaciones_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = (DataTable)grdAsignaciones.DataSource;

        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);
            dataView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            grdAsignaciones.DataSource = dataView;
            grdAsignaciones.DataBind();
        }
    }

    public string SortExpression
    {
        get { return (ViewState["SortExpression"] == null ? string.Empty : ViewState["SortExpression"].ToString()); }
        set { ViewState["SortExpression"] = value; }
    }
    public string SortDirection
    {
        get { return (ViewState["SortDirection"] == null ? string.Empty : ViewState["SortDirection"].ToString()); }
        set { ViewState["SortDirection"] = value; }
    }
    private string GetSortDirection(string sortExpression)
    {
        if (SortExpression == sortExpression)
        {
            if (SortDirection == "ASC")
                SortDirection = "DESC";
            else if (SortDirection == "DESC")
                SortDirection = "ASC";
            return SortDirection;
        }
        else
        {
            SortExpression = sortExpression;
            SortDirection = "ASC";
            return SortDirection;
        }
    }

    protected void botonCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("../MenuAdministrativo.aspx");
    }


    private void refreshGrid(List<Asignacion> asignaciones)
    {

        DataTable dt = new DataTable();
        dt.Columns.Add("numOT");
        dt.Columns.Add("figConstructor");
        dt.Columns.Add("fecha");
        dt.Columns.Add("nroPresupuesto");
        dt.Columns.Add("nombCliente");
        dt.Columns.Add("estado");
        DataRow dr;

        for (int i = 0; i < asignaciones.Count; i++)
        {
            Asignacion asig = (Asignacion)asignaciones[i];
            dr = dt.NewRow();
            dr["numOT"] = asig.OrdenTrabajo.Codigo;
            dr["figConstructor"] = asig.Constructor.ToString();
            dr["fecha"] = asig.OrdenTrabajo.FechaComienzo.ToShortDateString();
            dr["nroPresupuesto"] = asig.OrdenTrabajo.Presupuesto.Id;
            dr["nombCliente"] = asig.OrdenTrabajo.Presupuesto.figuracionCliente();
            dr["estado"] = asig.OrdenTrabajo.EstadoOT.Descripcion;
            dt.Rows.Add(dr);
        }
        grdAsignaciones.DataSource = dt;
        grdAsignaciones.DataBind();
    }
   
    protected void botonAceptar_Click(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(lstOrdenesTrabajo.SelectedValue) && !String.IsNullOrEmpty(lstConstructor.SelectedValue))
        {
            Constructor c = Constructor.buscarConstructor(Convert.ToInt32(lstConstructor.SelectedValue));
            OrdenTrabajo ot = OrdenTrabajo.buscarOrden(Convert.ToInt32(lstOrdenesTrabajo.SelectedValue));

            int asig = Asignacion.registrarAsignacion(c, ot);
            if (asig > 0)
            {
                List<Asignacion> asignaciones = Asignacion.buscarAsignacionesEnCurso();
                refreshGrid(asignaciones);
                List<OrdenTrabajo> ordenes = OrdenTrabajo.buscarOrdenesNoAsignadas();
                lstOrdenesTrabajo.DataSource = ordenes;
                lstOrdenesTrabajo.DataTextField = "textoAMostrar";
                lstOrdenesTrabajo.DataValueField = "codigo";
                lstOrdenesTrabajo.DataBind();
            }
            else
            {

                Session["error"] = "No se pudo asignar el contructor: " + c.ToString() + " con la OT: " + ot.Codigo;
                Session["ruta"] = "../MenuAdministrativo.aspx";
                Response.Redirect("Error.aspx");

            }
        }
        else {
            List<Asignacion> asignaciones = Asignacion.buscarAsignacionesEnCurso();
            refreshGrid(asignaciones);
        }

    }
}